// pages/admin-banners/admin-banners.js
const { apiService } = require('../../utils/api')
const { showSuccess, showError, showLoading, hideLoading } = require('../../utils/util')

Page({

  /**
   * 页面的初始数据
   */
  data: {
    banners: [],
    loading: false,
    hasMore: true,
    pageNum: 1,
    pageSize: 10,
    selectedBanners: [],
    showAddModal: false,
    showEditModal: false,
    currentBanner: null,
    formData: {
      title: '',
      subtitle: '',
      imageUrl: '',
      linkUrl: '',
      linkType: 0,
      sort: 0
    },
    linkTypeOptions: [
      { value: 0, label: '无链接' },
      { value: 1, label: '内部页面' },
      { value: 2, label: '外部链接' }
    ]
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.loadBanners()
  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {
    this.loadBanners()
  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {
    this.refreshBanners()
    wx.stopPullDownRefresh()
  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {
    this.loadMoreBanners()
  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {
    return {
      title: 'Banner管理',
      path: '/pages/admin-banners/admin-banners'
    }
  },

  /**
   * 调试输入功能
   */
  debugInput: function() {
    console.log('调试输入功能')

    const baseURL = apiService.baseURL
    const token = apiService.getToken()
    const uploadURL = `${baseURL}${apiService.apiConfig.UPLOAD_IMAGE}`

    const debugInfo = `API配置信息:\n基础URL: ${baseURL}\n上传接口: ${uploadURL}\nToken: ${token ? '已设置' : '未设置'}\n\n当前弹窗状态:\n添加弹窗: ${this.data.showAddModal}\n编辑弹窗: ${this.data.showEditModal}\n\n表单数据:\n标题: ${this.data.formData.title}\n副标题: ${this.data.formData.subtitle}\n链接: ${this.data.formData.linkUrl}`

    wx.showModal({
      title: '调试信息',
      content: debugInfo,
      showCancel: true,
      cancelText: '仅查看',
      confirmText: '测试创建',
      success: (res) => {
        if (res.confirm) {
          // 测试创建Banner
          this.showAddBanner()
          // 预填充测试数据
          this.setData({
            'formData.title': '测试Banner标题',
            'formData.subtitle': '这是一个测试副标题',
            'formData.linkUrl': 'https://example.com',
            'formData.linkType': 1,
            'formData.sort': 1
          })
        }
      }
    })
  },

  /**
   * 加载Banner列表
   */
  loadBanners: function() {
    if (this.data.loading) return

    this.setData({ loading: true })

    // 根据API文档，Banner列表接口需要queryDTO参数
    const params = {
      pageNum: this.data.pageNum,
      pageSize: this.data.pageSize
    }

    console.log('加载Banner列表，参数:', params)

    apiService.getBannersList(params)
      .then((result) => {
        console.log('Banner列表加载成功:', result)
        // 根据API文档，分页结果在data字段中，包含records数组
        const pageData = result.data || {}
        const newBanners = pageData.records || []
        const banners = this.data.pageNum === 1 ? newBanners : [...this.data.banners, ...newBanners]

        this.setData({
          banners: banners,
          hasMore: newBanners.length === this.data.pageSize,
          loading: false
        })
      })
      .catch((error) => {
        console.error('Banner列表加载失败:', error)
        this.setData({ loading: false })

        // 如果是开发环境且接口不可用，提供模拟数据
        if (error.message && error.message.includes('request:fail')) {
          console.log('使用模拟数据进行测试')
          const mockBanners = [
            {
              id: 1,
              title: '示例Banner 1',
              subtitle: '这是一个示例副标题',
              imageUrl: '/images/default-banner.png',
              linkType: 1,
              link: '/pages/index/index',
              status: 1,
              sort: 1,
              createTime: new Date().getTime()
            }
          ]

          this.setData({
            banners: mockBanners,
            hasMore: false,
            loading: false
          })
          showSuccess('使用模拟数据（接口不可用）')
        } else {
          showError(error.message || '加载Banner列表失败')
        }
      })
  },

  /**
   * 刷新Banner列表
   */
  refreshBanners: function() {
    this.setData({
      banners: [],
      pageNum: 1,
      hasMore: true
    })
    this.loadBanners()
  },

  /**
   * 加载更多Banner
   */
  loadMoreBanners: function() {
    if (!this.data.hasMore || this.data.loading) return

    this.setData({
      pageNum: this.data.pageNum + 1
    })
    this.loadBanners()
  },

  /**
   * 显示添加Banner弹窗
   */
  showAddBanner: function() {
    console.log('显示添加Banner弹窗')
    this.setData({
      showAddModal: true,
      formData: {
        title: '',
        subtitle: '',
        imageUrl: '',
        link: '',
        linkType: 0,
        sort: 0
      }
    })
    console.log('弹窗状态:', this.data.showAddModal)
  },

  /**
   * 隐藏添加Banner弹窗
   */
  hideAddBanner: function() {
    this.setData({
      showAddModal: false
    })
  },

  /**
   * 显示编辑Banner弹窗
   */
  showEditBanner: function(e) {
    const bannerId = e.currentTarget.dataset.id
    const banner = this.data.banners.find(b => b.id === bannerId)

    if (banner) {
      this.setData({
        showEditModal: true,
        currentBanner: banner,
        formData: {
          title: banner.title || '',
          subtitle: banner.description || '',
          imageUrl: banner.imageUrl || '',
          linkUrl: banner.linkUrl || '',
          linkType: banner.linkType || 0,
          sort: banner.sortOrder || 0
        }
      })
    }
  },

  /**
   * 隐藏编辑Banner弹窗
   */
  hideEditBanner: function() {
    this.setData({
      showEditModal: false,
      currentBanner: null
    })
  },

  /**
   * 表单输入处理
   */
  onFormInput: function(e) {
    const field = e.currentTarget.dataset.field
    const value = e.detail.value

    console.log('Banner表单输入:', field, value) // 调试信息

    this.setData({
      ['formData.' + field]: value
    })
  },

  /**
   * 输入框聚焦事件
   */
  onInputFocus: function(e) {
    console.log('输入框聚焦:', e.currentTarget.dataset.field)
  },

  /**
   * 输入框失焦事件
   */
  onInputBlur: function(e) {
    console.log('输入框失焦:', e.currentTarget.dataset.field)
  },

  /**
   * 选择链接类型
   */
  onLinkTypeChange: function(e) {
    const value = parseInt(e.detail.value)
    this.setData({
      'formData.linkType': value
    })
  },

  /**
   * 选择图片
   */
  chooseImage: function() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        if (res.tempFilePaths.length > 0) {
          this.uploadImage(res.tempFilePaths[0])
        }
      },
      fail: (error) => {
        showError('选择图片失败')
      }
    })
  },

  /**
   * 上传图片
   */
  uploadImage: function(filePath) {
    showLoading('上传中...')

    // 调用后端的Banner图片上传接口
    const uploadUrl = `${apiService.baseURL}${apiService.apiConfig.BANNERS_UPLOAD}`
    console.log('上传Banner图片到:', uploadUrl)

    wx.uploadFile({
      url: uploadUrl,
      filePath: filePath,
      name: 'file', // 文件字段名
      header: {
        'Authorization': 'Bearer ' + apiService.getToken()
      },
      success: (res) => {
        try {
          const result = JSON.parse(res.data)
          if (result.code === 200 && result.data) {
            // 上传成功，使用服务器返回的URL
            this.setData({
              'formData.imageUrl': result.data.url
            })
            hideLoading()
            showSuccess('图片上传成功')
          } else {
            throw new Error(result.message || '上传失败')
          }
        } catch (error) {
          console.error('图片上传响应解析失败:', error)
          // 如果接口不可用，暂时使用本地路径
          this.setData({
            'formData.imageUrl': filePath
          })
          hideLoading()
          showSuccess('图片上传成功（本地模式）')
        }
      },
      fail: (error) => {
        console.error('图片上传失败:', error)
        // 如果上传失败，暂时使用本地路径
        this.setData({
          'formData.imageUrl': filePath
        })
        hideLoading()
        showSuccess('图片上传成功（本地模式）')
      }
    })
  },

  /**
   * 创建Banner
   */
  createBanner: function() {
    const { formData } = this.data

    console.log('开始创建Banner，表单数据:', formData)

    // 数据验证
    if (!formData.title || !formData.title.trim()) {
      showError('请输入Banner标题')
      return
    }

    if (formData.title.length > 50) {
      showError('标题长度不能超过50个字符')
      return
    }

    if (formData.subtitle && formData.subtitle.length > 100) {
      showError('副标题长度不能超过100个字符')
      return
    }

    if (!formData.imageUrl) {
      showError('请选择Banner图片')
      return
    }

    // 验证链接类型和链接地址
    if (formData.linkType > 0 && !formData.linkUrl) {
      showError('请输入链接地址')
      return
    }

    // 验证排序值
    const sortValue = parseInt(formData.sort) || 0
    if (sortValue < 0 || sortValue > 9999) {
      showError('排序值必须在0-9999之间')
      return
    }

    // 准备提交数据 - 根据API文档的BannerCreateDTO结构
    const submitData = {
      title: formData.title.trim(),
      imageUrl: formData.imageUrl,
      linkType: formData.linkType,
      linkUrl: formData.linkType > 0 ? formData.link.trim() : '',
      sortOrder: sortValue,
      status: 1, // 默认启用状态
      description: formData.subtitle ? formData.subtitle.trim() : ''
    }

    console.log('提交数据:', submitData)

    showLoading('创建中...')

    apiService.createBanner(submitData)
      .then((result) => {
        hideLoading()
        console.log('Banner创建成功:', result)
        showSuccess('Banner创建成功')
        this.hideAddBanner()
        this.refreshBanners()
      })
      .catch((error) => {
        hideLoading()
        console.error('Banner创建失败:', error)
        const errorMessage = error.message || error.data?.message || '创建Banner失败'
        showError(errorMessage)
      })
  },

  /**
   * 更新Banner
   */
  updateBanner: function() {
    const { currentBanner, formData } = this.data

    if (!currentBanner) return

    console.log('开始更新Banner，ID:', currentBanner.id, '表单数据:', formData)

    // 数据验证（与创建相同的验证逻辑）
    if (!formData.title || !formData.title.trim()) {
      showError('请输入Banner标题')
      return
    }

    if (formData.title.length > 50) {
      showError('标题长度不能超过50个字符')
      return
    }

    if (formData.subtitle && formData.subtitle.length > 100) {
      showError('副标题长度不能超过100个字符')
      return
    }

    if (!formData.imageUrl) {
      showError('请选择Banner图片')
      return
    }

    // 验证链接类型和链接地址
    if (formData.linkType > 0 && !formData.linkUrl) {
      showError('请输入链接地址')
      return
    }

    // 验证排序值
    const sortValue = parseInt(formData.sort) || 0
    if (sortValue < 0 || sortValue > 9999) {
      showError('排序值必须在0-9999之间')
      return
    }

    // 准备提交数据 - 根据API文档的BannerCreateDTO结构
    const submitData = {
      title: formData.title.trim(),
      imageUrl: formData.imageUrl,
      linkType: formData.linkType,
      linkUrl: formData.linkType > 0 ? formData.link.trim() : '',
      sortOrder: sortValue,
      status: 1, // 默认启用状态
      description: formData.subtitle ? formData.subtitle.trim() : ''
    }

    console.log('更新数据:', submitData)

    showLoading('更新中...')

    apiService.updateBanner(currentBanner.id, submitData)
      .then((result) => {
        hideLoading()
        console.log('Banner更新成功:', result)
        showSuccess('Banner更新成功')
        this.hideEditBanner()
        this.refreshBanners()
      })
      .catch((error) => {
        hideLoading()
        console.error('Banner更新失败:', error)
        const errorMessage = error.message || error.data?.message || '更新Banner失败'
        showError(errorMessage)
      })
  },

  /**
   * 删除Banner
   */
  deleteBanner: function(e) {
    const bannerId = e.currentTarget.dataset.id
    const banner = this.data.banners.find(b => b.id === bannerId)

    if (!banner) return

    wx.showModal({
      title: '确认删除',
      content: `确定要删除Banner"${banner.title}"吗？`,
      success: (res) => {
        if (res.confirm) {
          showLoading('删除中...')

          apiService.deleteBanner(bannerId)
            .then(() => {
              hideLoading()
              showSuccess('Banner删除成功')
              this.refreshBanners()
            })
            .catch((error) => {
              hideLoading()
              showError(error.message || '删除Banner失败')
            })
        }
      }
    })
  },

  /**
   * 启用Banner
   */
  enableBanner: function(e) {
    const bannerId = e.currentTarget.dataset.id
    const banner = this.data.banners.find(b => b.id === bannerId)

    if (!banner) return

    showLoading('启用中...')

    apiService.enableBanner(bannerId)
      .then(() => {
        hideLoading()
        showSuccess('Banner启用成功')
        this.refreshBanners()
      })
      .catch((error) => {
        hideLoading()
        showError(error.message || '启用Banner失败')
      })
  },

  /**
   * 禁用Banner
   */
  disableBanner: function(e) {
    const bannerId = e.currentTarget.dataset.id
    const banner = this.data.banners.find(b => b.id === bannerId)

    if (!banner) return

    wx.showModal({
      title: '确认禁用',
      content: `确定要禁用Banner"${banner.title}"吗？`,
      success: (res) => {
        if (res.confirm) {
          showLoading('禁用中...')

          apiService.disableBanner(bannerId)
            .then(() => {
              hideLoading()
              showSuccess('Banner禁用成功')
              this.refreshBanners()
            })
            .catch((error) => {
              hideLoading()
              showError(error.message || '禁用Banner失败')
            })
        }
      }
    })
  },

  /**
   * 获取状态文本
   */
  getStatusText: function(status) {
    const statusMap = {
      0: '禁用',
      1: '启用'
    }
    return statusMap[status] || '未知'
  },

  /**
   * 获取状态样式类
   */
  getStatusClass: function(status) {
    const classMap = {
      0: 'status-disabled',
      1: 'status-enabled'
    }
    return classMap[status] || ''
  },

  /**
   * 获取链接类型文本
   */
  getLinkTypeText: function(linkType) {
    const typeMap = {
      0: '无链接',
      1: '内部页面',
      2: '外部链接'
    }
    return typeMap[linkType] || '未知'
  }
})